 /**************************** (C) COPYRIGHT 2017 Fortiortech shenzhen *****************************
* File Name          : Customer.h
* Author             : Fortiortech Appliction Team
* Version            : V1.0
* Date               : 2017-12-21
* Description        : This file contains all the common data types used for
*                      Motor Control.
***************************************************************************************************
* All Rights Reserved
**************************************************************************************************/

/* Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __CUSTOMER_H_
#define __CUSTOMER_H_

 #define version_wheel     (5.0)
/*芯片参数值-------------------------------------------------------------------*/
 /*CPU and PWM Parameter*/
 #define MCU_CLOCK                      (24.0)                                  // (MHz) 主频
 #define PWM_FREQUENCY_BLDC             (16.0)                                  // (kHz) 载波频率

 /*deadtime Parameter*/
 #define PWM_DEADTIME                   (2.0)                                   // (us) 死区时间
       

/*电机参数值-------------------------------------------------------------------*/
 #define Pole_Pairs                     (2.0)                                     // 极对数
 
/*有霍尔参数值-------------------------------------------------------------------*/
 #define DEGREES_120                    (0)       
 #define DEGREES_60                     (1)           
 #define HALL_SENSORS_PLACEMENT         DEGREES_120
 
 #define AdvanceEangle_EN            (0)//  (1)// (0)                              //超前使能 //滞后使能
 #define HALLADVANCEFIX              (0)// (1)// (0)                              //方向取反//预换向取反
 #define HALLADVANCEEANGLE_CW        (0)//  (-20)// (0)                             //正转超前角度//(-60~0)
 #define HALLADVANCEEANGLE_CCW       (0)//  (-20)// (0)                             //反转超前角度//(-60~0)
 
 #define HALLSEL_0                      (0)                              //P02/P37/P36
 #define HALLSEL_1                      (1)                              //P14/P16/P21
 #define HALL_IO_IC                     (HALLSEL_0)    
 
 
/*硬件板子参数设置值------------------------------------------------------------*/
/*PWM high or low level Mode*/
/*根据驱动芯片的类型选择*/
#define All_High_Level                 (0)                                     // 驱动高电平有效
#define All_Low_Level                  (1)                                     // 驱动低电平有效
#define UP_H_DOWN_L                    (2)                                     // 上桥臂高电平有效，下桥臂低电平有效
#define UP_L_DOWN_H                    (3)                                     // 上桥臂低电平有效，下桥臂高电平有效
#define PWM_Level_Mode                 (UP_H_DOWN_L)

/*hardware current sample Parameter*/
/*电流基准的电路参数*/

#define HW_RSHUNT                      (0.001)                                 // (Ω)  采样电阻
#define HW_AMPGAIN                     (10.0)                                  // 运放放大倍数
#define HW_ADC_REF                     (5.0)                                   // (V)  ADC参考电压

/*hardware voltage sample Parameter*/
/*母线电压采样分压电路参数*/
#define RV1                            (30.0)//(62.0)                                  // (kΩ) 母线电压分压电阻1
#define RV2                            (0.0)                                   // (kΩ) 母线电压分压电阻2
#define RV3                            (5.1)                                   // (kΩ) 母线电压分压电阻3
#define RV                             ((RV1 + RV2 + RV3) / RV3)               // 分压比

 
/*启动参数参数值----------------------------------------------------------------*/
 #define Charge_Time                    (10)    // by shiyan                // (ms) 预充电时间，单位：ms
 #define Charge_Duty                    (0.05)                                    // 预充电下桥Duty

 #define  START_Ramp_TimeINC             (10)             //载波次数
 #define  RAMP_DUTY_STA                  (0.3)//(0.25)//(0.18)//(0.15)//(0.04)           //初始占空比
 #define  RAMP_DUTY_END                  (0.3)//(0.25)//(0.18)//(0.15)//(0.08)           //结束占空比
 #define  RAMP_DUTY_INC                  (0.03)           //每（）次载波占空比增量
 
/*转速参数值-------------------------------------------------------------------*/
	#define MOTOR_SPEED_BASE         (35000.0)//    (40000.0)//    (35000.0)//  (40000.0)//(35000.0)/// (40000.0)//  (7200.0)//  (40000.0) // (20000.0) //(7200.0)// (40000.0)                              // (RPM) 速度基准
	//#define MOTOR_SPEED_BASE_H               (40000 >> 8)   
  // #define MOTOR_SPEED_BASE_K             _Q15(100/MOTOR_SPEED_BASE)


 /*速度环参数设置-----------------------------------------------------------*/
  #define SPEED_CALC_EN                  (1)                                    // 速度环使能
  #define SPEED_LOOP_TIME                (1.0)                                  // 5.0 (ms) 速度环调节周期
  #define SPEED_LOOP_SPEED               _Q15(100/MOTOR_SPEED_BASE)        

// 切速度闭环转速

  #define MOTOR_SPEED_MIN_RPM            (100.0)                                 // (RPM) 运行最小转速
  #define MOTOR_SPEED_MAX_RPM            (3600.0)//(1000.0)                              // (RPM) 高档运行最大转速 
  #define MOTOR_SPEED_DEFAULT_RPM        (500.0)
  #define MOTOR_SPEED_MIN_CU_RPM         (200.0)


  #define MOTOR_SPEED_MAX_CUST_RPM        (3000.0)

 #define Motor_Targetmax_Speed(Value)  _Q15(Value/MOTOR_SPEED_BASE)
 //_Q15((float)(((float)Curr_Value) / MOTOR_SPEED_BASE))

 /*速度环调节参数*/
 #if 1
  #define SKP    _Q12(0.90)//   _Q12(0.9)//  // // _Q12(0.1)//_Q12(0.8)  //    _Q12(0.8)//  _Q12(0.8)//  _Q12(0.9)//  _Q12(0.9)//    _Q12(0.9)  // _Q12(0.8)//_Q12(4.0)//_Q12(7.0)//_Q12(0.1)        _Q12(6.0)                      // 外环KP
  #define SKI    _Q12(0.08)//  _Q12(0.08)// //   _Q12(0.08)// _Q12(0.2)// _Q12(0.05)//_Q12(0.06) //    _Q12(0.06)//  _Q12(0.4)//  _Q12(0.4)// _Q12(0.05)//   _Q12(0.2)  //_Q12(0.4)// _Q12(0.4) // _Q12(0.09)// _Q12(0.06)//_Q12(0.05)  //0.02 0.03  //0.05              // 外环KI
#else 
   #define SKP    _Q12(0.1)
   #define SKI    _Q12(0.05)
#endif 

  #define SPEED_INC                      (600.0)// (100.0)                                // 速度环增量
  #define SPEED_DEC                      (600.0)// (100.0)                                // 速度环减量 
  
  #define SPEED_INC_F                   (300.0)// (100.0)                                // 速度环增量
  #define SPEED_DEC_F                   (300.0)// (100.0)                                // 速度环减量 
  
  #define SPEED_INC_S                   (100.0)// (100.0)                                // 速度环增量
  #define SPEED_DEC_S                   (100.0)// (100.0)                                // 速度环减量 

  #define SPEED_INC_MIC                (30.0)
  #define SPEED_DEC_MIC                (30.0)
  
/*电机开机、关机的设置----------------------------------------------------------*/
 /* motor ON/0FF value */
 #define OFF_Duty                     _Q15(0.15/HW_ADC_REF)                              // 关机PWM占空比，小于该占空比关机                                                                                //关机PWM占空比，小于该占空比时关机
 #define ON_Duty                      _Q15(0.18/HW_ADC_REF)                              // 开机PWM占空比，大于该占空比时开机
 #define MIN_Duty                     _Q15(0.02/HW_ADC_REF)                              // 速度曲线上最小PWM占空比
 #define MAX_Duty                     _Q15(4.80/HW_ADC_REF)                               // 速度曲线上最大PWM占空比
 #define Min_BLDC_Duty                (0.15)  //(0.15)//(0.14)  
 #define Max_BLDC_Duty                (1.0)            


 #define I_LimtValue_Up							   I_Value(20.5)                      // 母线电流限流区间触发值 60												  
 #define I_LimtValue_Out						   I_Value(20.0)                      // 母线电流限流区间稳定值 59														 
 #define I_LimtValue_Dw							   I_Value(18.0)                       // 母线电流限流区间退出值 50


/*模式选择设置值----------------------------------------------------------------*/
 /*IPM测试模式*/
 #define IPMtest                        (0)                                     // IPM测试或者MOS测试，MCU输出固定占空比
 #define NormalRun                      (1)                                     // 正常按电机状态机运行
 #define IPMState                       (NormalRun)

/*Motor  Direction: CW or CCW*/
#define  CW							    (0)														                                  // CW ,正转
#define  CCW						    (1)														                                 // CCW,反转
//#define  NODIR                          (2)            

/*保护参数值-------------------------------------------------------------------*/
 /*硬件过流保护*/
 #define Hardware_FO_Protect            (1)                                     // 硬件FO过流保护使能，适用于IPM有FO保护的场合
 #define Hardware_CMP_Protect           (2)                                     // 硬件CMP比较过流保护使能，适用于MOS管应用场合
 #define Hardware_FO_CMP_Protect        (3)                                     // 硬件CMP比较和FO过流保护都使能
 #define Hardware_Protect_Disable       (4)                                     // 硬件过流保护禁止，用于测试
 #define HardwareCurrent_Protect        (Hardware_CMP_Protect)                  // 硬件过流保护实现方式

 /*硬件过流保护比较值来源*/
 #define Compare_DAC                    (0)                                     // DAC设置硬件过流值
 #define Compare_Hardware               (1)                                     // 硬件设置硬件过流值
 #define Compare_Mode                   (Compare_DAC)                           // 硬件过流值的来源
 
 /*硬件过流保护*/
 #define OverHardcurrentValue          (70.0)//  (70.0)  // (70.0)                                // (A) DAC模式下的硬件过流值
 /*软件过流保护*/
 #define CurrentcoverEnable            (1)                                 // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue         I_Value(15.0)                            // (A) 软件过流值
 #define OverCurrentcoverTime          (5000)                                  // (ms) 过流保护恢复时间

 #define Current1coverEnable           (1)                                // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue1         I_Value(17.0)                           // (A) 软件过流值
 #define OverCurrentcoverTime1         (2000)                                  // (ms) 过流保护恢复时间
 
 #define Current2coverEnable           (1)                                // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue2         I_Value(20.0)                           // (A) 软件过流值
 #define OverCurrentcoverTime2         (500)                                  // (ms) 过流保护恢复时间
 
 #define Current3coverEnable           (1)                                // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue3         I_Value(22.0)                           // (A) 软件过流值
 #define OverCurrentcoverTime3         (50)                                  // (ms) 过流保护恢复时间 
 
 #define Current4coverEnable           (1)                                // 过流保护使能位, 0，不使能；1，使能
 #define OverSoftCurrentValue4         I_Value(25.0)                           // (A) 软件过流值
 #define OverCurrentcoverTime4         (10)                                     // (ms) 过流保护恢复时间 

 #define can_spi_write_conflict        (0)
 
 /*过欠压保护*/
 #define VoltageProtect                 (1)                                // 电压保护：Enable--使能  Disable--禁止  
 #define Over_Protect_Voltage       (31.5)  //     (26.5)                                  // (V) 直流电压过压保护值
 #define Over_Recover_Vlotage       (29.0) //   (24.5)                                  // (V) 直流电压过压保护恢复值
 #define Under_Protect_Voltage      (18.0) //(15.0) //  (15.0)                                   // (V) 直流电压欠压保护值
 #define Under_Recover_Vlotage      (19.0)//  (15.5)  //  (15.5)                                   // (V) 直流电压欠压保护恢复值


#define  Tempera_Value_MOS(NTC_Value_mos)  _Q15(NTC_Value_mos/(10.0+NTC_Value_mos))    //6.8
#define  Tempera_Value_BAT(NTC_Value_bat)  _Q15((NTC_Value_bat/(6.8+NTC_Value_bat)))
#define  Tempera_Value_MOT(NTC_Value_mot)  _Q15((NTC_Value_mot/(2.2+NTC_Value_mot)))

/*Mos温度保护*/
#define  Mos_TemperatureProtectEnable      (1)                              // MOS温度保护使能：1--使能  0--禁止
#define  OVER_Mos_Temperature            Tempera_Value_MOS(1.204)// 92 // 80度  //0.724               // MOS过温保护阈值，根据NTC曲线设定 85度保护
#define  UNDER_Mos_Temperature           Tempera_Value_MOS(3.023)  //60度  1.683               // MOS低温恢复阈值，根据NTC曲线设定 60度恢复
#define  UNDER_Mos_Temperature1          Tempera_Value_MOS(122.4)                // MOS低温保护阈值，根据NTC曲线设定 -30度保护
#define  Over_Mos_TemperRecoverTime        (1000)                                // MOS过温恢复时间
/*BAT温度保护*/ 
#define  BAT_TemperatureProtectEnable      (0)                              // BAT温度保护使能：1--使能  0--禁止
#define  OVER_BAT_Temperature            Tempera_Value_BAT(1.001)                // BAT过温保护阈值，根据NTC曲线设定  75度保护
#define  UNDER_BAT_Temperature           Tempera_Value_BAT(1.683)                // BAT过温恢复阈值，根据NTC曲线设定  60度恢复
#define  UNDER_BAT_Temperature1          Tempera_Value_BAT(234.7)                // BAT低温保护阈值，根据NTC曲线设定 -40度保护
#define  Over_BAT_TemperRecoverTime        (5000)              
/*MOT温度保护*/ 
#define  MOT_TemperatureProtectEnable      (0)                              // MOT温度保护使能：1--使能  0--禁止
#define  OVER_MOT_Temperature            Tempera_Value_MOT(0.459)                // MOT过温保护阈值，根据NTC曲线设定  100度保护
#define  UNDER_MOT_Temperature           Tempera_Value_MOT(1.683)                // MOT过温恢复阈值，根据NTC曲线设定  60度恢复
#define  Over_MOT_TemperRecoverTime        (1000)     
 
/*霍尔堵转保护*/
 #define  HALL_Stall_Enable              (1)
 #define  Stall_time_VALUE               (1000)//(1000)// (10000)
 #define  BreakDownTime                  (2000)
 #define  StopSendCanTime                (5000)
 #define  CanBusBusyCount                 (60)
 //#define hallLPFTime                   (3)
 #define GOTOBRWAKTIME                 (996)
 
#endif
